package br.usjt.teste;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import br.usjt.dominio.Cliente;
import br.usjt.dominio.ClienteRepositorio;
import br.usjt.servico.DAOFactory;
import br.usjt.servico.IClienteDAO;
import br.usjt.servico.MySQLClienteDAO;
import br.usjt.servico.MySQLDAOFactory;
/**
 * Testa o caso de uso UC01CadastrarCliente
 * 
 */
public class UC01CadastrarCliente {
	static IClienteDAO clienteDAO;
	static ClienteRepositorio clienteRepositorio;
	static Cliente umCliente;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		clienteDAO = DAOFactory.getDAOFactory(DAOFactory.MYSQL).getClienteDAO();
		clienteRepositorio = new ClienteRepositorio();
		umCliente = new Cliente();
		umCliente.setCPF("87759492103");
		umCliente.setNome("carlos andrade");
		umCliente.setTelefone("1234-1234");
		umCliente.setEndereco("r. taquari");
	}

	
	/**
	 * Objetivo- verificar o comportamento da integracao da funcao cadastrar cliente na camada de persistencia
	 */
	@Test
	public void CT01FBCadastraCliente_com_sucesso() {
		assertEquals("qt de registro modificados no db=", 1, clienteDAO.cadastra("87759492103",	"carlos manoel", "r. taquari", "11111111"));
	}
	/**
	 * Objetivo- verificar o comportamento da funcao cadastrar cliente na camada de persistencia para um cpf ja cadastrado
	 */
	@Test
	public void CT02A1CadastraCliente_cpf_ja_cadastrado() {
		//Duplicate entry '87759492103' for key 'PRIMARY'
		assertEquals("qt de registro modificados no db=", 0, clienteDAO.cadastra("87759492103",	"carlos manoel", "r. taquari", "11111111"));
	}
	/**
	 * Objetivo - valida a conexao de acesso ao db
	 * Pre-condicao - o driver de conexao do db foi carregado com sucesso
	 */
	@Test
	public void CT03ValidaConexao_com_sucesso() {
		assertNotNull("valida a conexao =>", MySQLDAOFactory.criaConexao());
	}
	
	/**
	 * Objetivo - valida a instanciacao de um objeto DAOCliente
	 * Pre-condicao - o driver de conexao do db foi carregado com sucesso
	 */
	@Test
	public void CT04ObtemClienteDAO_com_sucesso() {
		assertTrue(DAOFactory.getDAOFactory(DAOFactory.MYSQL).getClienteDAO() instanceof MySQLClienteDAO);
	}
	
	/***************************************************************************************************
	 * Teste na camada de dominio
	 **************************************************************************************************/
	
	/**
	 * Objetivo - valida a integracao da camada de dominio com a camada de persistencia
	 */
	@Test
	public void CT03CadastraClienteA1_cpf_ja_cadastrado() {
		assertEquals("mensagem informando: ","Duplicate entry '87759492103' for key 'PRIMARY'",clienteRepositorio.cadastra(umCliente));
	}
	/**
	 * Objetivo - valida a integracao da camada de dominio com a camada de persistencia
	 */
	@Test
	public void CT04CadastraClienteFB_com_sucesso() {
		clienteDAO.exclui("87759492103");
		assertEquals("mensagem informando: ","true",clienteRepositorio.cadastra(umCliente));
	}
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		clienteDAO.exclui("87759492103");
	
	}

}
